iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0
自我挑戰組

C++ 還債之路:From basic to modern系列 第 1

Day1 前言、學習資源和快速基本語法

  • 分享至 

  • xImage
  •  

前言及動機

筆者大學時沒認真上課,C++ 會的跟C差不多,可能比C語言多個Class 跟 C++11 smart pointers 的皮毛而已,馬步沒扎穩,寫程式總是無法非常得心應手。這幾年C++ 逐步演進,若再不更新相關知識,只怕會越來越落後,希望藉此次機會可以在C++26定案前,將過去欠的C++債儘量補起來,讓自己可以更熟悉這門語言,也作為 C++ 的學習筆記給各位讀者和未來的我批評。若文章中有錯或是有更好的表達方式還請各位多多鞭策小弟。學習任何一種語言,最基本的心態是「語言是要花一生來學習的」,只要這語言一直在被人使用和進化,就沒有學完的一天。

學習資源

這邊收集了一些我個人覺得不錯的學習資源跟工具,也是接下來我主要的參考資源。大多是英文,主要是第一手資料還是要看英文,外加現在人工智慧的翻譯很強,可以使用AI翻譯或解釋。繁體中文的閱讀者在搜尋繁體中文的資料很快,附在這裡的效益我覺得不高。若有推薦的可以在留言處幫忙補充,我會一起更新,不限語言。

網站

  1. Cpp Coreguidelines - C++官方的Best Practice
  2. Cpp reference - C++的網路辭典
  3. 现代 C++ 教程:高速上手 C++ 11/14/17/20 - 簡體中文,專門介紹Modern C++
  4. w3 scool 的 C++ tutorial - 非常適合小白從頭開始學

影片

  1. CppCon - 可以從Back to Basics 開始
  2. C++ Weekly from Jason Turner
  3. C++ tutorial for Beginners in 4 hours

工具

  1. Godbolt - 超強大的線上Compiler,你想得到的程式語言都可以在上面編譯

這邊選這兩本中文書,是因為這兩本書涉及電腦底層的運作和函式庫以及編譯器等相關知識對於學習 C/C++ 相當有幫助也比較容易理解

  1. 程式設計師的自我修養-連結、載入、程式庫
  2. 程式揭秘-從 C/C++ 程式碼探索電腦系統的運作原理

基礎語法和宣告 Quick Review

變數與常數和運算式

grammar

  1. 型態 名字;
  2. 型態 名字 = 運算式;
// 
// 變數
int a = 0;
char a{'a'};

// 常數
const double PI = 3.1415926;
#define ACCLERATE 9.8
const int a; // 以初始化為 0
a = 3; // compile error: 在初始化後,程式內的常數便不可更改(immutable)
int sum = 1+1; // 數學運算
int twice = a << 1 | sum; // 位元運算
unsigned int pos_num = 123; // unsigned 無號數,自然數
bool flag = (a> 1 || sum < 4); // 邏輯運算

更多的變數和types 可以參考https://en.cppreference.com/w/cpp/language/types.html

block/scope 區塊

由一對大括號{}組成,scope 內的變數生命週期和scope 外是獨立不相關的,且僅存於scope內

int a = 3; 
{
    int a = 4;
    
}
int b = a+1; // 這邊是第一行的a

條件 statement

  1. if-else
if(condition) {
    ... // 條件滿足做的事
} else {
    ... // 條件不滿足做的事
}

// 可以只在條件滿足時做事
if(condition) {
    ...
}
  1. if-else if
if(condition1) {
    // 條件1 滿足時做的事
} else if(condition2) {
    // 條件2 滿足時做的事
} else {
    // 都不滿足時做的事,不需要做事時,可以拿掉else 區塊
}

迴圈 statement

  1. For loop
// (迴圈變數初始化; 迴圈條件; 迴圈變數迭代更新)
for(int a=0; a<5; a+=1) {
    ...
}
  1. While loop
// 條件滿足時才會進入迴圈
while(a == b) {
    ...
}
  1. do-while loop
// 先執行區塊內的事,再檢查條件,條件滿足才會在進入迴圈
do {
    ...
} while(condition)

break/continue

  • break 跳出區塊後離開
  • continue 跳出區塊後繼續執行
int a = 5;
for(int i=0; i<10; i++) {
    if(i == 5) {
        break; // 跳出for loop,不在執行迴圈
    }
    a += 1; // i 等於5後,a再也不會被更新
}

int i=0;
while(i<10) {
    if( i == 5) {
        i += 1;
        continue; // 跳出if block 但是會繼續執行while 迴圈
    }
    a += 1; // 只有當 i 為5 時,a 不會被更新
    i += 1;
}

switch case

int a = get_from_input();
switch(a) {
    case 3: // a == 3 開始執行
        ...
        ...
        ...
        break; // a == 3 執行到這
    case 4: // a == 4 開始執行
        ...
        ...
        ...
    case 5: // a == 5 開始執行
        ...
        break; // a== 4 or a == 5 都會執行到這
    default: // 其他條件 開始執行
        ...
        break; // 其他條件 結束執行
}

函式

語法: 回傳型態 函式名稱([參數列表] type1 name1, type2 name2, ...)

void print() {
    ...
}
int sum(int a, int b) {
    return  a+b;
}

那第一天就先到這


下一篇
Day2 C++工具包:編譯、除錯和函式庫管理
系列文
C++ 還債之路:From basic to modern2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言